import org.slf4j.Logger
import org.slf4j.LoggerFactory
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths

/**
 * 用于从特定文件路径中获取字符串数据的类
 */
class TodayFileStringDataGetter : StringDataGetter {

    // 默认文本内容，用于在文件未找到时返回
    companion object {
        private val LOG:Logger = LoggerFactory.getLogger(TodayFileStringDataGetter::class.java)
        private const val DEFAULT_TEXT_CONTENT: String = "";
    }

    /**
     * 从给定路径中读取字符串数据
     *
     * @param path 要读取的文件路径
     * @return 读取到的字符串数据，如果文件未找到则返回默认内容
     */
    private fun getStringData(path: Path): String {
        try {
            val data = Files.readString(path)
            LOG.info("已读取到数据")
            return data
        } catch (e: Exception) {
            LOG.warn("没有找到文件: {}。将使用默认字符串", path)
            return DEFAULT_TEXT_CONTENT
        }
    }

    /**
     * 获取今天的文件数据
     *
     * 该函数首先构造今天文件的路径，验证路径的有效性，然后尝试读取文件数据
     * 如果文件不存在，则返回默认的空字符串
     *
     * @return 文件内容或默认的空字符串
     * @throws IllegalArgumentException 如果路径无效
     */
    override fun getTodayFileData(): String {
        val fileName = Config.getTodayFileName()
        val todayFilePath: Path = Paths.get(Config.FILE_PATH.toString(), fileName)
        // 验证路径以防止路径遍历攻击
        if (!todayFilePath.startsWith(Paths.get(Config.FILE_PATH.toString()))) {
            throw IllegalArgumentException("Invalid path: $todayFilePath")
        }
        return getStringData(todayFilePath)
    }
}
